package br.com.controller.acesso;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;


import br.com.arquitetura.controlador.AbstractMBean;
import br.com.arquitetura.excecoes.BDException;
import br.com.arquitetura.servico.ServiceCadastro;
import br.com.data.hibernate.UsuarioHibernateDAO;
import br.com.model.entidade.Usuario;
import br.com.util.setup.StringToMD5;

@ManagedBean
public class MBAcessoUsuario extends AbstractMBean<Usuario>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String senha;
	private String novaSenha;
	private String repeticaoSenha;
	
	
	@ManagedProperty(value="#{serviceCadastro}")
	private ServiceCadastro serviceCadastro;
	
	public void setServiceCadastro(ServiceCadastro serviceCadastro) {
		this.serviceCadastro = serviceCadastro;
	}
	
	public void alterarSenha(){
		this.senha = StringToMD5.md5(senha);
		if (!novaSenha.contentEquals(repeticaoSenha)){
			addFacesErrorMessage("Senhas não conferem");
		}else if(!senha.contentEquals(getUsuario().getSenha())){
			addFacesErrorMessage("Senhas atual não confere");
		}else{
			Usuario user = getUsuario();
			user.setSenha(StringToMD5.md5(novaSenha));
			serviceCadastro.atualizar(user);
			addFacesInformationMessage("Senha alterada com sucesso");
		}
	}
	


	public String getNovaSenha() {
		return novaSenha;
	}

	public void setNovaSenha(String novaSenha) {
		this.novaSenha = novaSenha;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getRepeticaoSenha() {
		return repeticaoSenha;
	}

	public void setRepeticaoSenha(String repeticaoSenha) {
		this.repeticaoSenha = repeticaoSenha;
	}

	public ServiceCadastro getServiceCadastro() {
		return serviceCadastro;
	}

	public Usuario getUsuario(){
		SecurityContext context = SecurityContextHolder.getContext();
		if(context instanceof SecurityContext){
			Authentication authentication = context.getAuthentication();
			if(authentication instanceof Authentication){
				String nome = ((User)authentication.getPrincipal()).getUsername();
				
				try {
					UsuarioHibernateDAO usuarioHibernateDAO = (UsuarioHibernateDAO) getBean("usuarioHibernateDAO");
					Usuario usuario = usuarioHibernateDAO.getByField(Usuario.class,"matricula", nome).get(0);
					return usuario;
				} catch (BDException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
		
		
		return null;
		//return getUsuarioLogado();
	}
	
}
